#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>

struct Stu
{
    char sid[8];// 学号
    char name[8];// 姓名
    int age;// 年龄
    char spe[8];// 专业
    char cla[4];// 班级
};

struct Stu s = {"123456", "张三", 20, "软件", "2294"};
void Write(int wfd)
{
    char buffer[1024];

    // 格式化到buffer
    snprintf(buffer, sizeof(buffer), "sid: %s\nname: %s\nage: %d\nspe: %s\ncla: %s\n",
             s.sid, s.name, s.age, s.spe, s.cla);
    write(wfd, buffer, sizeof(buffer));
}

void Read(int rfd)
{
    char buffer[1024];
    read(rfd, buffer, sizeof(buffer));
    printf("--------------\n");
    printf("%s", buffer);
    printf("--------------\n");
}

int main()
{
    int pipefd[2];
    int n = pipe(pipefd); // 创建管道
    if (n < 0) return 1;

    pid_t id = fork(); // 创建子进程
    if (id == 0)
    {
        // 子进程 - 读
        close(pipefd[1]);
        Read(pipefd[0]);
        exit(0);
    }
    // 父进程 - 写
    close(pipefd[0]);
    Write(pipefd[1]);
    wait(NULL); // 等待

    return 0;
}